/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.cardapiodigital.model;

import br.com.cardapiodigital.data.CidadesData;
import br.com.cardapiodigital.data.EstadosData;
import br.com.cardapiodigital.entity.Cidades;
import br.com.cardapiodigital.entity.Estados;
import br.com.cardapiodigital.exception.CardapioDigitalException;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author egberto
 */
@ManagedBean
@ViewScoped
public class CidadesModel extends AbstractModel implements Serializable {

    //cidades
    private CidadesData cidadeData;
    private Cidades cidade = null;
    private List<Cidades> todasCidades = null;
    private String estadoSelecionado = null;
    private Cidades cidadeSelecionada = null;
    
    //estados   
    private EstadosModel estadoModel = null;
    private EstadosData estadoData = null;
    private Estados estado = null;

    public CidadesModel() {
    }

    public void salvar() {
        try {
            setEstado(getEstadoData().obtem(getEstadoSelecionado()));
            getCidade().setEstadosUf(getEstado());
            getCidadeData().salvar(getCidade());
            closeDialog();
            displayInfoMessageToUser("Created With Sucess");
            carregarTodasCidades();
            resetCidade();
        } catch (Exception e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ops, we could not create. Try again later");
            e.printStackTrace();
        }
    }

    public void atualizar() {
        try {
            setEstado(getEstadoData().obtem(getEstadoSelecionado()));
            getCidadeSelecionada().setEstadosUf(getEstado());
            getCidadeData().atualizar(getCidade());
            closeDialog();
            displayInfoMessageToUser("Updated With Sucess");
            carregarTodasCidades();
            resetCidade();
        } catch (Exception e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ops, we could not create. Try again later");
            e.printStackTrace();
        }
    }

    public void excluir() {
        try {
            getCidadeData().excluir(getCidadeSelecionada().getId());
            closeDialog();
            displayInfoMessageToUser("Deleted With Sucess");
            carregarTodasCidades();
            resetCidade();
        } catch (Exception e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ops, we could not create. Try again later");
            e.printStackTrace();
        }
    }

    public CidadesData getCidadeData() {
        if (this.cidadeData == null) {
            this.cidadeData = new CidadesData();
        }
        return this.cidadeData;
    }

    public Cidades getCidade() {
        if (this.cidade == null) {
            this.cidade = new Cidades();
        }
        return this.cidade;
    }

    public void setCidade(Cidades cidade) {
        this.cidade = cidade;
    }

    public List<Cidades> carregarTodasCidades() throws CardapioDigitalException {
        return todasCidades = getCidadeData().buscarTodos();
    }

    public void resetCidade() {
        cidade = new Cidades();
    }

    public String getEstadoSelecionado() {
        return estadoSelecionado;
    }

    public void setEstadoSelecionado(String estadoSelecionado) {
        this.estadoSelecionado = estadoSelecionado;
    }

    public EstadosModel getEstadoModel() {
        if (this.estadoModel == null) {
            this.estadoModel = new EstadosModel();
        }
        return this.estadoModel;
    }

    public void setCidadeData(CidadesData cidadeData) {
        this.cidadeData = cidadeData;
    }

    public void setEstadoModel(EstadosModel estadoModel) {
        this.estadoModel = estadoModel;
    }

    public void setEstadoData(EstadosData estadoData) {
        this.estadoData = estadoData;
    }

    public EstadosData getEstadoData() {
        if (this.estadoData == null) {
            this.estadoData = new EstadosData();
        }
        return this.estadoData;
    }

    public Estados getEstado() {
        if (this.estado == null) {
            this.estado = new Estados();
        }
        return this.estado;
    }

    public void setEstado(Estados estado) {
        this.estado = estado;
    }

    public Cidades getCidadeSelecionada() {
        if (cidadeSelecionada == null) {
            cidadeSelecionada = new Cidades();
        }
        return cidadeSelecionada;
    }

    public void setCidadeSelecionada(Cidades cidadeSelecionada) {
        this.cidadeSelecionada = cidadeSelecionada;
    }

    public void onRowSelect(SelectEvent slc) {
        setCidadeSelecionada((Cidades) slc.getObject());
    }
}
